// 《围棋》作者版权所有。保留所有权利。
// 此源代码的使用受BSD样式
// 许可证的约束，该许可证可以在许可证文件中找到。

package objabi

// 该文件定义了Go二进制文件中PCDATA和FUNCDATA指令
// 的ID。
// 
// 这些必须与..
// 运行时/symtab。去

const (
	PCDATA_UnsafePoint   = 0
	PCDATA_StackMapIndex = 1
	PCDATA_InlTreeIndex  = 2
	PCDATA_ArgLiveIndex  = 3

	FUNCDATA_ArgsPointerMaps    = 0
	FUNCDATA_LocalsPointerMaps  = 1
	FUNCDATA_StackObjects       = 2
	FUNCDATA_InlTree            = 3
	FUNCDATA_OpenCodedDeferInfo = 4
	FUNCDATA_ArgInfo            = 5
	FUNCDATA_ArgLiveInfo        = 6
	FUNCDATA_WrapInfo           = 7

	// ArgsSizeUnknown在Func中设置。argsize标记参数大小未知的所有函数
	// 和
	// 没有明确规范的汇编代码。
	// 此值由编译器、汇编器或链接器生成。
	ArgsSizeUnknown = -0x80000000
)

// 特殊PCDATA值。
const (
	// PCDATA_非安全点值。
	PCDATA_UnsafePointSafe   = -1 // 异步抢占安全
	PCDATA_UnsafePointUnsafe = -2 // 异步抢占不安全

	// PCDATA_Restart1（2）应用于
	// 中的一系列指令，如果发生异步抢占，我们应该在恢复时将PC 
	// 退回到序列的开头。
	// 我们需要两个，这样我们就可以区分序列的开始/结束
	// 以防两个序列相邻。
	PCDATA_Restart1 = -3
	PCDATA_Restart2 = -4

	// 与PCDATA_Restart1类似，但如果异步抢占，则返回函数项。
	PCDATA_RestartAtEntry = -5
)
